class ShopCartService {
  public productname!: string
  public count!: number
  constructor() {}
  addShopCart() {
    console.log('增加商品:', this.productname + ':数量:', this.count)
  }
}

/**
 *  这里定义的type 必须满足 function <T> (targetClass: {new (...args: any[]) : T}) 这个函数的类型
 * 这里 targetClass 的参数 {new (...args: any[]) : T 是泛型工厂函数类型
 * 这里写的 和 上一章泛型工厂函数 <T>(Constructor: { new (...arg: any): T }) 并不完全相同, 因为返回值的类型是不相同的
 * */
type MyClassDecorator = <T>(targetClass: new (...args: any[]) => T) => void

//function createInstanceFactory(Constructor:new (...arg: any) => any) {

// function Controller(rootPath: string) : MyClassDecorator {
//     return function <T> (targetClass: {new (...args: any[]) : T}) {
//         // 这个内部函数并不要求返回什么 直接写 void 就行了 所以 MyClassDecorator 返回值是 void 就行了
//     }
// }

function Controller2(rootPath: string): MyClassDecorator {
  return function (targetClass) {
    // 这个内部函数并不要求返回什么 直接写 void 就行了 所以 MyClassDecorator 返回值是 void 就行了
  }
}
